home *** CD-ROM | disk | FTP | other *** search
/ Gekkan Dennou Club 147 / Gekkan Dennou Club - 2000.8 Vol. 147 (Japan).7z / Gekkan Dennou Club - 2000.8 Vol. 147 (Japan) (Track 1).bin / docs / ippon / data / etc / lboss04.lzh / fxsp2lib.c < prev    next >
C/C++ Source or Header  |  1999-04-22  |  2KB  |  120 lines

  1. /* fxsp2lib.c */
  2.  
  3. #include <stdlib.h>
  4. #include <stdio.h>
  5.  
  6. #define    SPRITE_MAX    256
  7. #define    FRAME_MAX    256
  8.  
  9. typedef struct {
  10.     signed short vx;    /* 相対座標データ */
  11.     signed short vy;    /* 相対座標データ */
  12.     unsigned short pt;    /* スプライトパターンNo. */
  13.     unsigned short rv;    /* 反転コード */
  14. } SP_WORK;
  15.  
  16. static int frame_no = 0;
  17. static int sprite_no = 0;
  18. static int sprite_no_max[FRAME_MAX];
  19. static char *fname = "temp001.obj";
  20.  
  21. SP_WORK sp_work[FRAME_MAX][SPRITE_MAX];
  22.  
  23.  
  24. short fxsp_on (void)
  25. {
  26.     return (0);
  27. }
  28.  
  29.  
  30.  
  31. /* xsp_set_st と置き換えて使うと引き数の構造体を .obj ファイルに書き出す */
  32. short fxsp_set_st (void *sp_work0)
  33. {
  34.     if (sprite_no < SPRITE_MAX) {
  35.         sp_work[frame_no][sprite_no].vx = ((SP_WORK *) sp_work0)->vx;
  36.         sp_work[frame_no][sprite_no].vy = ((SP_WORK *) sp_work0)->vy;
  37.         sp_work[frame_no][sprite_no].pt = ((SP_WORK *) sp_work0)->pt;
  38.         sp_work[frame_no][sprite_no].rv = ((SP_WORK *) sp_work0)->rv;
  39.  
  40.         sprite_no++;
  41.     }
  42.     return (0);
  43. }
  44.  
  45.  
  46.  
  47. short fxsp_out (void)
  48. {
  49.     short s = sprite_no;
  50.  
  51.     sprite_no_max[frame_no++] = sprite_no;
  52.     sprite_no = 0;
  53.  
  54.     return (s);
  55. }
  56.  
  57.  
  58.  
  59. static void write_pos (FILE * fp, signed short pos)
  60. {
  61.     signed short p = pos - 144;
  62.  
  63.     if (p < 0)
  64.         fprintf (fp, "-$%04hx    ", -p);
  65.     else
  66.         fprintf (fp, " $%04hx    ", p);
  67.  
  68.     return;
  69. }
  70.  
  71.  
  72.  
  73. short fxsp_off (void)
  74. {
  75.     FILE *fp;
  76.     int i, j, pr;
  77.  
  78.     if ((fp = fopen (fname, "w")) == NULL) {
  79.         printf ("ファイルを書き込めません\n");
  80.         return (-1);
  81.     }
  82.     fprintf (fp, "\nPCG_FILE    =    *.sp    256    * 使用する PCG データ\n"
  83.          "\n"
  84.          "XY_OFFSET    =    $0000    $0000    * 座標のオフセット\n"
  85.          "PT_OFFSET    =    $0000        * PCGパターンナンバーのオフセット\n"
  86.          "OBJ_RV        =    $0000        * 全体の反転コード\n"
  87.          "\n"
  88.          "No.        =    *    * 複合スプライトのパターンナンバー\n"
  89.          "\n");
  90.  
  91.  
  92.     for (i = 0; i < frame_no; i++) {
  93.         fprintf (fp,
  94.              "******************************** 複合スプライトパターン %3d ****\n\n"
  95.              "No.    =    NEXT    * 複合スプライトのパターンナンバー\n"
  96.              "            * 左から順に、X Y PT RV (以下同様)\n"
  97.              ,i, i);
  98.  
  99.         for (pr = 0x3f; pr > 0; pr--) {
  100.             for (j = 0; j < sprite_no_max[i]; j++) {
  101.                 /* ソートして書き出す(ソートしてないけど) */
  102.                 if ((sp_work[i][j].rv & 0x3f) == pr) {
  103.                     fprintf (fp, "    ");
  104.                     write_pos (fp, sp_work[i][j].vx);
  105.                     write_pos (fp, sp_work[i][j].vy);
  106.  
  107.                     fprintf (fp, "$%04x    ", sp_work[i][j].pt);
  108.                     fprintf (fp, "$%04x\n", sp_work[i][j].rv);
  109.                 }
  110.             }
  111.         }
  112.         fprintf (fp, "\n\n");
  113.     }
  114.  
  115.     fclose (fp);
  116.  
  117.     return (0);
  118.  
  119. }
  120.